package com.cx.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/**
 * @author zhangshuai
 * @version V1.0
 * @Project Java2_26
 * @Package com.cx.thread
 * @Description:
 * @Date 2025/5/25 20:26
 */

public class MyThread extends Thread{

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("子线程："+i);
        }
    }

    public static void main(String[] args) {
        new MyThread().start();
        //同一时间只能有一个线程去执行这个方法
        new Thread(new Runnable(){
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println("子线程："+i);
                }
            }
        }).start();
        //实现Callable接口
        //1.创建Callable接口的实现类
        //2.实现call方法，将此线程需要执行的操作声明在call()中
        //3.创建Callable接口实现类的对象
        //4.将此Callable接口实现类的对象作为参数传递到FutureTask构造器中，创建FutureTask的对象
        //5.将FutureTask的对象作为参数传递到Thread类的构造器中，创建Thread对象，并调用start()

        new Thread( new FutureTask<>(new Callable<Integer>(){
            @Override
            public Integer call() throws Exception {
                int sum = 0;
                for (int i = 0; i < 100; i++) {
                    if (i%2 == 0){
                        System.out.println(i);
                        sum += i;
                    }
                }
                return sum;
            }
        })).start();

        //守护线程：
        //1.线程分为用户线程和守护线程
        //2.虚拟机必须确保用户线程执行完毕
        //3.虚拟机不用等待守护线程执行完毕，如，后台记录操作日志，监控内存，垃圾回收等待...
        //任务提交过程




        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println("守护线程："+i);
                }
            }
        });
        thread.setDaemon(true);//设置为守护线程
        //设置优先级
        thread.setPriority(Thread.MAX_PRIORITY);//10

    }
}